using System.Runtime.CompilerServices;

namespace RAG.Application.Interfaces
{
    /// <summary>
    /// 日志服务接口 - Domain层定义
    /// </summary>
    public interface IAppLogService
    {
        /// <summary>
        /// 记录调试信息
        /// </summary>
        void LogDebug(string message, [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0);

        /// <summary>
        /// 记录信息
        /// </summary>
        void LogInformation(string message, [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0);

        /// <summary>
        /// 记录警告
        /// </summary>
        void LogWarning(string message, [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0);

        /// <summary>
        /// 记录错误
        /// </summary>
        void LogError(string message, Exception? exception = null, [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0);

        /// <summary>
        /// 记录致命错误
        /// </summary>
        void LogFatal(string message, Exception? exception = null, [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0);

        /// <summary>
        /// 记录业务操作日志
        /// </summary>
        void LogBusinessOperation(string operation, string userId, string details, [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0);

        /// <summary>
        /// 记录性能日志
        /// </summary>
        void LogPerformance(string operation, long elapsedMilliseconds, [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0);
    }
} 